/**
* Funciones auxiliares para el manejo de la estructura asociada a la
* metainformacion de un rol
*
* @author Carlos Rodriguez Dominguez
*/

#ifndef _MIROLE_H_
#define _MIROLE_H_

#include "collaboration.h"

namespace MIRole {
	
	/**
	* Obtiene la posicion de un componente
	*
	* @param r Rol
	* @param name Nombre del componente
	* @return Posicion del componente o -1 si no se encontro
	*/
	int getComponent(const Collaboration::MIRole& r, const ::std::string& name);
	
	/**
	* Asigna un valor para el miembro "is_online"
	*
	* @param r Rol
	* @param b Valor para el miembro "is_online"
	*/
	void isOnline(Collaboration::MIRole& r, bool b);
	
	/**
	* Comprueba si el rol tiene como rol asociado (intercambiable) otro rol
	*
	* @param r Rol
	* @param role Nombre del rol que puede ser intercambiable
	* @return True si el rol es intercambiable o False si no lo es 
	*/
	bool hasAllowedRole(const Collaboration::MIRole& r, const ::std::string& role);
	
	/**
	* Agrega un rol asociado (intercambiable) a otro rol
	*
	* @param r Rol
	* @param role Nombre del rol que puede ser intercambiable
	* @return True si el rol se agrego o False en caso contrario
	*/
	bool addAllowedRole(Collaboration::MIRole& r, const ::std::string& role);
	
	/**
	* Elimina un rol asociado (intercambiable) a otro rol
	*
	* @param r Rol
	* @param role Nombre del rol que puede ser intercambiable
	* @return True si el rol se elimino o False en caso contrario
	*/
	bool removeAllowedRole(Collaboration::MIRole& r, const ::std::string& role);
	
	/**
	* Obtiene el nivel de permisos de un rol sobre un componente
	*
	* @param r Rol
	* @param comp_name Nombre del componente
	* @return Nivel de permisos del rol sobre el componente
	*/
	int getComponentPermissions(const Collaboration::MIRole& r, const ::std::string& comp_name);
	
	/**
	* Asigna un nivel de permisos para un componente. Si el componente no existe lo CREA
	*
	* @param r Rol
	* @param comp_name Nombre del componente
	* @param level Nivel de permisos
	*/
	void setComponentPermissions(Collaboration::MIRole& r, const ::std::string& comp_name, int level);
}

#endif
